iT邦幫忙

2022 iThome 鐵人賽

DAY 27
0
自我挑戰組

三十天,PG與我系列 第 27

PostgreSQL功能介紹-Foreign table

  • 分享至 

  • xImage
  •  

PostgreSQL提供foreign data wrapper的功能,讓使用者可以將任意的資料源(像是其他的資料庫,或是本機的檔案)透過Postgres來進行SQL查詢,並且得到和自身進行SQL查詢同樣格式的回傳結果。

1.首先針對想要使用的foreign data wrapper安裝之後,在資料庫上面CREATE EXTENSION
2.對foreign data wrapper CREATE EXTENSION之後,使用foreign data wrapper進行CREATE SEVER的動作
3.透過CREATE USER MAPPING指令,將本地的postgres使用者跟foreign data的使用者作對應
4.使用CREATE FOREIGN TABLE與之前建立的SERVER來建立foreign table,之後便能透過foreign data wrapper進行資料查詢

例子:使用postgres_fdw查詢另一台Postgres主機上的資料

在想要把另一台Postgres資料庫上面的table作為foreign table的instance上面啟用擴充套件

CREATE EXTENSION postgres_fdw

然後再來下CREATE SERVER指令,先指定名稱,然後指定CREATE SERVER所要使用的foreign data wrapper,再來後面的OPTIONS將可選的設定值帶入foreign data wrapper,這裡帶入另一台伺服器的IP以及所要連線的資料庫及port

CREATE SERVER pg12_vm
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host '192.168.152.132', dbname 'foreign_test', port '5432');

接著將當前的使用者對應到remote server上面用來存取foreign table的使用者登入資訊

CREATE USER MAPPING FOR CURRENT_USER SERVER pg12_vm
OPTIONS (user 'gmfcd128', password 'pZ7Sugnw');

最後使用之前設定好的server以及遠端的table資訊來在本機上建立一個foreign table

create foreign table remote_student_data (student_id integer, grade integer, class integer, name varchar(20))
SERVER pg12_vm OPTIONS (schema_name 'public', table_name 'student_data');

建立完成之後,本機上對foreign table進行查詢就會從相應的資料源(這裡是另外一台Postgres資料庫)讀出資料,並且在本機得到SQL表格的執行結果,也可以和本機查詢的資料做結合。
//本地查詢結果+foreign table查詢結果,可以透過pgAdmin的側邊欄看到foreign data wrapper→foreign server→user mapping以及foreign table之間的關係
https://ithelp.ithome.com.tw/upload/images/20220927/20114934KahOzTqTJY.png
//單純local table的查詢結果
https://ithelp.ithome.com.tw/upload/images/20220927/20114934dgOr85lxLf.png

如果覺得手動建立foreign table的對應過於麻煩,Postgres也提供import foreign schema的功能,比如說可以輸入
IMPORT FOREIGN SCHEMA public
FROM SERVER customer_server INTO public;
這樣遠端伺服器上的schema裡面的table就會自動變成本地端的foreign table可以使用。

特殊用途foreign data wrapper

https://github.com/postgrespro/lsm
網路上有人透過foreign data wrapper的方式,將PostgreSQL與RocksDB對接在一起,由PostgreSQL語法查詢加上lsm-tree的資料儲存方式,在某些儲存裝置上的讀寫性能可以得到一定程度的提升。


上一篇
PostgreSQL ALTER指令的使用
下一篇
PostgreSQL效能測試-使用YCSB
系列文
三十天,PG與我30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言